package com.zhugang.week13.recursion;

/**
 * @program algorithms
 * @description: CellDivision
 * @author: chanzhugang
 * @create: 2022/10/17 00:14
 */
public class CellDivision {

    /**
     * 1个细胞生命周期是3小时，1小时分裂一次。求n个小时后有多少细胞(净细胞)。细胞会在每个小时的开始分裂，死亡，并且先分裂后死亡。
     */
    public int cellDivision(int n) {
        // 递归问题：子问题的解组合求原问题的解
        if (n == 0) return 1;
        if (n == 1) return 2;
        if (n == 2) return 4;
        if (n == 3) return 8;
        // 细胞分裂变2倍 - 3小时前的细胞
        return 2 * cellDivision(n - 1) - cellDivision(n - 4);
    }
}